home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 February: Tool Chest / Apple Developer CD Series Tool Chest February 1996 (Apple Computer)(1996).iso / Tool Chest / Testing & Debugging / Hardware tools / HW Bring-up Tools / IncrPattern.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-09-17  |  3.9 KB  |  177 lines  |  [TEXT/MPS ]

  1. //
  2. //    Usage:
  3. //    IncrPattern baseAddr size initialPattern increment
  4.  
  5. #include <Types.h>
  6. #include <StdIO.h>
  7. #include <Memory.h>
  8.  
  9.  
  10. #define numArgs    5        /* Number of arguments for write command.    */
  11.  
  12. typedef struct 
  13. {
  14.     void *bankAddress ;    // Input
  15.     Size bankSize ;        // Input
  16.     long seedPattern ;    // Input
  17.     long patternIncrement ;    // Input
  18.     void **failedAddress ;    // Output
  19.     long *failedBits ;    // Output
  20.     long *failedOffset ;    // Output
  21.     long *actualData ;    // Output
  22.     long *expectedData ;    // Output
  23. } RAMIncrPatternPrivArgs ;
  24.  
  25. long RAMIncrPattern(RAMIncrPatternPrivArgs *args) ;
  26.  
  27.  
  28.  
  29. typedef unsigned long ulong ;
  30. typedef ulong ULONG ;
  31.  
  32. //
  33. // Main()
  34. //
  35. unsigned main(ulong argC, char *argV[])
  36. {    
  37.     enum
  38.     {
  39.         kCommandArg,
  40.         kBaseAddrArg,
  41.         kSizeArg,
  42.         kInitialPatternArg,
  43.         kIncrementArg
  44.     } ;
  45.     ulong status = noErr;
  46.     RAMIncrPatternPrivArgs args ;
  47.     long err ;
  48.     
  49.     if (argC == numArgs)
  50.     {    
  51.         long *baseAddress ;
  52.         Size size ;
  53.         long initialPattern ;
  54.         long increment ;
  55.         
  56.         long *failedAddress ;
  57.         long failedBits ;
  58.         long failedOffset ;
  59.         long actualData ;
  60.         long expectedData ;
  61.     
  62.         sscanf(argV[kBaseAddrArg],"%i", &baseAddress) ;
  63.         sscanf(argV[kSizeArg],"%i", &size) ;
  64.         sscanf(argV[kInitialPatternArg],"%i", &initialPattern) ;
  65.         sscanf(argV[kIncrementArg],"%i", &increment) ;
  66.     
  67.         args.bankAddress = baseAddress ;
  68.         args.bankSize = size ;
  69.         args.seedPattern = initialPattern ;
  70.         args.patternIncrement = increment ;
  71.         
  72.         args.failedAddress = &failedAddress ;
  73.         args.failedBits = &failedBits ;
  74.         args.failedOffset = &failedOffset ;
  75.         args.actualData = &actualData ;
  76.         args.expectedData = &expectedData ;
  77.         
  78.         err = RAMIncrPattern(&args) ;
  79.         
  80.         if(err)
  81.         {
  82.             fprintf(stdout, "# Failed\n") ;
  83.             fprintf(stdout, "# bankAddress = $%08X (%d)\n", 
  84.                     args.bankAddress, args.bankAddress) ;
  85.             fprintf(stdout, "# bankSize = $%08X (%d)\n", 
  86.                     args.bankSize, args.bankSize) ;
  87.             fprintf(stdout, "# seedPattern = $%08X (%d)\n", 
  88.                     args.seedPattern, args.seedPattern) ;
  89.             fprintf(stdout, "# patternIncrement = $%08X (%d)\n", 
  90.                     args.patternIncrement, args.patternIncrement) ;
  91.                     
  92.             fprintf(stdout, "# failedAddress = $%08X (%d)\n", 
  93.                     failedAddress, failedAddress) ;
  94.             fprintf(stdout, "# failedOffset = $%08X (%d)\n", 
  95.                     failedOffset, failedOffset) ;
  96.             fprintf(stdout, "# actualData = $%08X (%d)\n", 
  97.                     actualData, actualData) ;
  98.             fprintf(stdout, "# expectedData = $%08X (%d)\n", 
  99.                     expectedData, expectedData) ;
  100.         }else{
  101.             fprintf(stdout, "# Passed\n") ;
  102.         }
  103.         
  104.     }else
  105.         status++;
  106.  
  107.     if (status != noErr)
  108.         fprintf(stdout,"# Usage %s - baseAddr size initialPattern increment.\n", argV[kCommandArg]);
  109.  
  110.     return(status);
  111. }
  112.  
  113.  
  114. //
  115. // RAMIncrPattern()
  116. //
  117. long RAMIncrPattern(RAMIncrPatternPrivArgs *args)
  118. {
  119.     ULONG *longPtr ;
  120.     ULONG offset ;
  121.     ULONG failedBits ;
  122.     ULONG actualData ;
  123.     ULONG expectedData ;
  124.     ULONG pattern ;
  125.     
  126.     enum
  127.     {
  128.         noError = 0,
  129.         errMemoryISFSuiteFailedVerify = 1
  130.     } ;
  131.     
  132.     // Write the incrementing pattern.
  133.     pattern = args->seedPattern ;
  134.     longPtr = args->bankAddress ;
  135.     for(offset = 0; offset < args->bankSize ; offset += sizeof(ULONG))
  136.     {
  137.         // Write the pattern.
  138.         *longPtr++ = pattern ;
  139.  
  140.         // Next pattern.
  141.         pattern += args->patternIncrement;
  142.     }
  143.     
  144.     // Verify the incrementing pattern.
  145.     pattern = args->seedPattern ;
  146.     longPtr = args->bankAddress ;
  147.     for(offset = 0; offset < args->bankSize ; offset += sizeof(ULONG))
  148.     {
  149.         // Verify the pattern.
  150.         actualData = *longPtr++ ;
  151.         expectedData = pattern ;
  152.         failedBits = actualData ^ pattern ;
  153.         if(0 != failedBits)
  154.         {
  155.             *(args->failedAddress) = longPtr ;
  156.             *(args->failedBits) = failedBits ;
  157.             *(args->failedOffset) = offset ;
  158.             *(args->actualData) = actualData ;
  159.             *(args->expectedData) = expectedData ;
  160.             
  161.             return(errMemoryISFSuiteFailedVerify) ;
  162.         }
  163.         
  164.         // Next pattern.
  165.         pattern += args->patternIncrement;
  166.     }
  167.     
  168.     // All is well.
  169.     *(args->failedAddress) = NULL ;
  170.     *(args->failedBits) = NULL ;
  171.     *(args->failedOffset) = NULL ;
  172.     *(args->actualData) = NULL ;
  173.     *(args->expectedData) = NULL ;
  174.     
  175.     return(noError) ;
  176. }
  177.